#include"BlockQueue.hpp"
#include"Task.hpp"
#include<ctime>
#include<functional>
using task_t=std::function<void()>;
using namespace TaskModule;
using namespace BlockQueueModule;
int datas=10;
void Haha(){
    cout<<"Haha"<<endl;
}
void Hehe(){
    cout<<"Hehe"<<endl;
}
void*Consumer(void*arg){
    BlockQueue<task_t>*bq=static_cast<BlockQueue<task_t>*>(arg);
while(true){
    task_t t;
    Task task;
    sleep(2);
    //先从bq把数据拿出来
    bq->Pop(&t);
    t();
    //printf("处理了一个任务%d+%d=%d\n",task.X(),task.Y(),task.Result());
   
    //再对数据加工处理
  
    
}
}
void*Producter(void*arg){
BlockQueue<task_t>*bq=static_cast<BlockQueue<task_t>*>(arg);
while(true){
    //从外部获取数据
   int x=rand()%10+1;
   int y=rand()%20+1;
   Task task(x,y);
    //printf("产生了一个任务%d+%d=?\n",task.X(),task.Y());
    //把数据加入到bq
    bq->Equeue(Haha);
    datas++;
}
}
int main(){
    srand(time(nullptr));
    BlockQueue<task_t>*bq=new BlockQueue<task_t>(5);
    pthread_t tid1,tid2,tid3,tid4;
    pthread_create(&tid1,nullptr,Consumer,(void*)bq);
    pthread_create(&tid2,nullptr,Producter,(void*)bq);
    // pthread_create(&tid3,nullptr,Consumer,(void*)bq);
    // pthread_create(&tid4,nullptr,Producter,(void*)bq);
    //pthread_create(&tid3,nullptr,active,(void*)"thread-3");
    //pthread_create(&tid4,nullptr,active,(void*)"thread-4");

    pthread_join(tid1,nullptr);
    pthread_join(tid2,nullptr);
    //pthread_join(tid3,nullptr);
    //pthread_join(tid4,nullptr);
}